#include "vagregarmision.h"

VAgregarMision :: VAgregarMision(Gtk::Window &win, VecContinentes &vector, VecMisiones &vM): 
		window(win),
		vec(vector),
		vMisiones(vM){
}
	
VAgregarMision :: ~VAgregarMision(){
}

void VAgregarMision :: run(){
	
	Gtk::Dialog dialog("Agregar Misión", window);
	dialog.add_button("Conquista", CONQUISTA);
	dialog.add_button("Eliminacion", ELIMINACION);
	dialog.add_button("Ver Misiones", VERMISIONES);
	dialog.add_button("Cancelar", CANCELAR);
	Gtk::Label label("Seleccione la opción deseada: ");
	dialog.get_vbox()->pack_start(label);
	dialog.show_all();
	int response = dialog.run();
	
	dialog.hide();
	bool ok;
	
	switch(response){
		case CONQUISTA: ok = conquista();
						if(ok){
							vMisiones.agregarMision(getContinente(), getDescripcion(), getExtras());
						}
						break;
		case ELIMINACION: ok = eliminacion();
						if(ok){
							vMisiones.agregarMision(getColor());
						}
						break;
		case VERMISIONES: mostrarMisiones();
						  break;
		case CANCELAR: break;
		default: break;
	}
	
	return;
}

void VAgregarMision :: mostrarMisiones(){
	
	int respuesta = 0;
	string mensaje;
	
	Gtk::Dialog dialog("Ver misiones", window);
	Gtk::TextView texto;
	dialog.add_button("Proximo", 0);
	dialog.add_button("Cerrar", 1);
	dialog.set_size_request(350,350);
	texto.set_size_request(dialog.get_width(), 50);
	dialog.get_vbox()->pack_start(texto,true,true,5);
	
	int numeroMision = 0;
	
	while(respuesta != 1){
		if(vMisiones.get_size() == 0){
			mensaje.assign("No has agregado ninguna misión.");
		}
		else{
			if(numeroMision == vMisiones.get_size())
				numeroMision = 0;
			Mision* m = vMisiones.at(numeroMision);
			string num, total;
			char cadena[10];
			sprintf(cadena,"%d",numeroMision+1);
			num.assign(cadena);
			sprintf(cadena,"%d",vMisiones.get_size());
			total.assign(cadena);
			mensaje.assign(num+"/"+total+"\n\n");
			mensaje.append("Tipo: "+m->get_tipo()+"\n\n"+m->toString());
		}
		Glib::RefPtr<Gtk::TextBuffer> buffer = Gtk::TextBuffer::create();
		buffer->set_text(mensaje);
		texto.set_buffer(buffer);
		dialog.show_all();
		respuesta = dialog.run();
		dialog.hide();
		numeroMision++;
	}
}

bool VAgregarMision :: conquista(){
	string ent(""), descr("");
	int combo = 0, response;
	bool completo = false;
	Glib::RefPtr<Gtk::TextBuffer> textB = Gtk::TextBuffer::create();
	
	
	while(!completo){
		Gtk::Dialog dialog("Agregar Misión Conquista", window);
		Gtk::Label label1("Seleccione el continente a conquistar: ");
		Gtk::HSeparator hs, hs2;
		Gtk::HBox hBox;
		Gtk::Label label2("Elija los paises extra a conquistar");
		entrada.set_text(ent);
		hBox.pack_start(label2);
		hBox.pack_start(entrada);
		Gtk::ScrolledWindow descripcionBarra;
		textB->set_text(descr);
		descripcion.set_buffer(textB);
		descripcionBarra.add(descripcion);
		descripcion.set_size_request(dialog.get_width(), 100);
		Gtk::Label label3("Escriba una breve descripción de la misión: ");
	
		cargaCombo(comboBox, combo);
		
		dialog.get_vbox()->pack_start(label1);
		dialog.get_vbox()->pack_start(comboBox);
		dialog.get_vbox()->pack_start(hs);
		dialog.get_vbox()->pack_start(hBox);
		dialog.get_vbox()->pack_start(hs2);
		dialog.get_vbox()->pack_start(label3);
		dialog.get_vbox()->pack_start(descripcionBarra, true, true, 0);
	
		dialog.add_button("Agregar", Gtk::RESPONSE_ACCEPT);
		dialog.add_button("Cancelar", Gtk::RESPONSE_CANCEL);
	
		dialog.show_all();
	
		response = dialog.run();
	
		switch(response){
			case Gtk::RESPONSE_ACCEPT: ent.assign(entrada.get_text());
									   entradaValida(ent);
									   combo = comboBox.get_active_row_number();
									   textB = descripcion.get_buffer();
									   descr.assign(textB->get_text());
									   if(ent.length() != 0 && descr.length() != 0){
										   completo = true;
									   }
									   break;
			default: completo = true;
					 break;
			
									  
		}

	}
	
	if(response == Gtk::RESPONSE_ACCEPT){
		return true;
	}
	else return false;
	
}
void VAgregarMision :: cargaCombo(Gtk::ComboBoxText &comboCont, int pos){

	for(int i = 0; i < vec.get_Size(); i++){
		Continente *c = vec.get_Continente(i);
		comboCont.append_text(c->get_Nombre());
	}
	comboCont.set_active(pos);
	return;
}

void VAgregarMision :: entradaValida(string &entrada){
	int zero = atoi(entrada.c_str());
	if(zero == 0){
		entrada.assign("");
	}
	return;
}

string VAgregarMision :: getContinente(){
	return comboBox.get_active_text();
}

string VAgregarMision :: getDescripcion(){
	Glib::RefPtr<Gtk::TextBuffer> textB = descripcion.get_buffer();
	return textB->get_text();
}

int VAgregarMision :: getExtras(){
	return atoi(entrada.get_text().c_str());
}

bool VAgregarMision :: eliminacion(){
	Gtk::Dialog dialog("Agregar Mision Eliminacion", window);
	cargaEliminacionBox();
	Gtk::HBox hBox;
	Gtk::Label label1("Escoja el color a eliminar: ");
	hBox.pack_start(label1);
	hBox.pack_start(eliminacionBox);
	dialog.get_vbox()->pack_start(hBox);
	dialog.add_button("Agregar", Gtk::RESPONSE_ACCEPT);
	dialog.add_button("Cancelar", Gtk::RESPONSE_CANCEL);
	
	dialog.show_all();
	
	int response = dialog.run();
	
	if(response == Gtk::RESPONSE_ACCEPT){
		return true;
	}
	else{
		return false;
	}
}

void VAgregarMision :: cargaEliminacionBox(){
	
	string colores[6] = {"violeta", "marron", "rojo", "amarillo", "verde", "azul"};
	
	for(int i = 0; i < 6; i++){
		eliminacionBox.append_text(colores[i]);
	}
	eliminacionBox.set_active(0);
	return;
	
}

string VAgregarMision :: getColor(){
	return eliminacionBox.get_active_text();
}
